package com.hyf.util;

import com.hyf.entity.RantQuota;
import com.hyf.entity.TradePitEntity;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * @author houyangfan
 * @version 1.0
 * @date 2021/12/15 13:23
 */
public class AutoConfigUtil {

    //获取费率及额度表中的数据列表
    public static List<RantQuota> getRantQuotaList(Sheet sheet, int rowNumber){
        List<RantQuota> list=new ArrayList<>();
        for (int i=0;i<rowNumber;i++){
            Row row = sheet.getRow(i);
            RantQuota rantQuota=new RantQuota();
            row.getCell(0).setCellType(CellType.STRING);
            row.getCell(2).setCellType(CellType.STRING);
            row.getCell(3).setCellType(CellType.STRING);
            row.getCell(4).setCellType(CellType.STRING);
            row.getCell(6).setCellType(CellType.STRING);
            row.getCell(7).setCellType(CellType.STRING);
            row.getCell(8).setCellType(CellType.STRING);
            row.getCell(10).setCellType(CellType.STRING);
            row.getCell(11).setCellType(CellType.STRING);
            row.getCell(12).setCellType(CellType.STRING);
            row.getCell(13).setCellType(CellType.STRING);
            row.getCell(15).setCellType(CellType.STRING);
            row.getCell(16).setCellType(CellType.STRING);
            row.getCell(17).setCellType(CellType.STRING);
            if (!isNullOrEmpty(row.getCell(0).getStringCellValue())){
                rantQuota.setTicker(row.getCell(0).getStringCellValue());
            }
            if (!isNullOrEmpty(row.getCell(2).getStringCellValue())){
                rantQuota.setLeixing(row.getCell(2).getStringCellValue());
                if (!"erc20".equalsIgnoreCase(rantQuota.getLeixing())){
                    rantQuota.setRealname(rantQuota.getTicker().toLowerCase()+"_"+rantQuota.getLeixing().toLowerCase());
                }else {
                    rantQuota.setRealname(rantQuota.getTicker().toLowerCase());
                }
            }
            if (!isNullOrEmpty(row.getCell(3).getStringCellValue())&& !isNullOrEmpty(row.getCell(4).getStringCellValue())){
                rantQuota.setAddUrl(StringUtils.substringBeforeLast(row.getCell(3).getStringCellValue(),"A"));
                rantQuota.setTxUrl(StringUtils.substringBeforeLast(row.getCell(4).getStringCellValue(),"T"));
            }
            if (!isNullOrEmpty(row.getCell(6).getStringCellValue())){
                BigDecimal bigNum=new BigDecimal(row.getCell(6).getStringCellValue());
                rantQuota.setBigNum(bigNum.toPlainString());
            }
            if (!isNullOrEmpty(row.getCell(7).getStringCellValue())){
                rantQuota.setDepMin(row.getCell(7).getStringCellValue());
            }
            if (!isNullOrEmpty(row.getCell(8).getStringCellValue())){
                rantQuota.setQuerenshu(row.getCell(8).getStringCellValue());
            }
            if (!isNullOrEmpty(row.getCell(10).getStringCellValue())){
                rantQuota.setWithdrawNum(row.getCell(10).getStringCellValue());
            }
            if (!isNullOrEmpty(row.getCell(11).getStringCellValue())){
                BigDecimal withdrawMin=new BigDecimal(row.getCell(11).getStringCellValue());
                rantQuota.setWithdrawMin(withdrawMin.toPlainString());
            }
            if (!isNullOrEmpty(row.getCell(12).getStringCellValue())){
                BigDecimal withdrawMax=new BigDecimal(row.getCell(12).getStringCellValue());
                rantQuota.setWithdrawMax(withdrawMax.toPlainString());
            }
            if (!isNullOrEmpty(row.getCell(13).getStringCellValue())){
                BigDecimal feeMin=new BigDecimal(row.getCell(13).getStringCellValue());
                rantQuota.setFeeMin(feeMin.toPlainString());
            }
            if (!isNullOrEmpty(row.getCell(15).getStringCellValue())){
                BigDecimal feeMax=new BigDecimal(row.getCell(15).getStringCellValue());
                rantQuota.setFeeMax(feeMax.toPlainString());
            }
            if (!isNullOrEmpty(row.getCell(16).getStringCellValue())){
                rantQuota.setCountNum(row.getCell(16).getStringCellValue());
            }
            if (!isNullOrEmpty(row.getCell(17).getStringCellValue())){
                rantQuota.setUsdtNum(row.getCell(17).getStringCellValue());
            }
            list.add(rantQuota);
        }
        return list;
    }

    //获取交易区表中的数据列表
    public static List<TradePitEntity> getTradePitList(Sheet sheet, int rowNumber){
        List<TradePitEntity> list=new ArrayList<>();
        for (int i=0;i<rowNumber;i++){
            Row row = sheet.getRow(i);
            TradePitEntity tradePitEntity=new TradePitEntity();
            row.getCell(0).setCellType(CellType.STRING);
            row.getCell(1).setCellType(CellType.STRING);
            row.getCell(2).setCellType(CellType.STRING);
            row.getCell(3).setCellType(CellType.STRING);
            row.getCell(4).setCellType(CellType.STRING);
            row.getCell(6).setCellType(CellType.STRING);
            row.getCell(7).setCellType(CellType.STRING);
            if (!isNullOrEmpty(row.getCell(0).getStringCellValue())){
                tradePitEntity.setTicker(row.getCell(0).getStringCellValue());
            }
            if (!isNullOrEmpty(row.getCell(1).getStringCellValue())){
                tradePitEntity.setXuhao(row.getCell(1).getStringCellValue());
            }
            if (!isNullOrEmpty(row.getCell(2).getStringCellValue())){
                tradePitEntity.setJiaoyiqu(StringUtils.substringBeforeLast(row.getCell(2).getStringCellValue(),"区"));
                if (tradePitEntity.getJiaoyiqu().equals("USDT")){
                    tradePitEntity.setJyqNor("201142");
                    tradePitEntity.setJyqLock("202142");
                }else if(tradePitEntity.getJiaoyiqu().equals("sUSDT")){
                    tradePitEntity.setJyqNor("201634");
                    tradePitEntity.setJyqLock("202634");
                }else if(tradePitEntity.getJiaoyiqu().equals("BTC")){
                    tradePitEntity.setJyqNor("201101");
                    tradePitEntity.setJyqLock("202101");
                }else if(tradePitEntity.getJiaoyiqu().equals("TCH")){
                    tradePitEntity.setJyqNor("201108");
                    tradePitEntity.setJyqLock("202108");
                }else if (tradePitEntity.getJiaoyiqu().equals("ETH")){
                    tradePitEntity.setJyqNor("201102");
                    tradePitEntity.setJyqLock("202102");
                }else if (tradePitEntity.getJiaoyiqu().equals("USDC")){
                    tradePitEntity.setJyqNor("201420");
                    tradePitEntity.setJyqLock("202420");
                }
            }
            if (!isNullOrEmpty(row.getCell(3).getStringCellValue())){
                tradePitEntity.setPriceLen(row.getCell(3).getStringCellValue());
                //进行价格小数位的设置
                Integer priceLen=Integer.parseInt(tradePitEntity.getPriceLen());
                if (priceLen==8||priceLen==10){
                    tradePitEntity.setPriceLen2("6");
                    tradePitEntity.setPriceLen3("4");
                    BigDecimal bigDecimal1=new BigDecimal(1/Math.pow(10,priceLen));
                    BigDecimal bigDecimal2=new BigDecimal(1/Math.pow(10,6));
                    BigDecimal bigDecimal3=new BigDecimal(1/Math.pow(10,4));
                    tradePitEntity.setShendu1(String.format("%."+priceLen+"f",bigDecimal1));
                    tradePitEntity.setShendu2(String.format("%.6f",bigDecimal2));
                    tradePitEntity.setShendu3(String.format("%.4f",bigDecimal3));
                }else if (priceLen==6){
                    tradePitEntity.setPriceLen2("4");
                    tradePitEntity.setPriceLen3("2");
                    BigDecimal bigDecimal1=new BigDecimal(1/Math.pow(10,6));
                    BigDecimal bigDecimal2=new BigDecimal(1/Math.pow(10,4));
                    BigDecimal bigDecimal3=new BigDecimal(1/Math.pow(10,2));
                    tradePitEntity.setShendu1(String.format("%.6f",bigDecimal1));
                    tradePitEntity.setShendu2(String.format("%.4f",bigDecimal2));
                    tradePitEntity.setShendu3(String.format("%.2f",bigDecimal3));
                }else if (priceLen==4||priceLen==5){
                    tradePitEntity.setPriceLen2("2");
                    tradePitEntity.setPriceLen3("1");
                    BigDecimal bigDecimal1=new BigDecimal(1/Math.pow(10,priceLen));
                    BigDecimal bigDecimal2=new BigDecimal(1/Math.pow(10,2));
                    BigDecimal bigDecimal3=new BigDecimal(1/Math.pow(10,1));
                    tradePitEntity.setShendu1(String.format("%."+priceLen+"f",bigDecimal1));
                    tradePitEntity.setShendu2(String.format("%.2f",bigDecimal2));
                    tradePitEntity.setShendu3(String.format("%.1f",bigDecimal3));
                }else if (priceLen==2){
                    tradePitEntity.setPriceLen2("1");
                    tradePitEntity.setPriceLen3("0");
                    BigDecimal bigDecimal1=new BigDecimal(1/Math.pow(10,2));
                    BigDecimal bigDecimal2=new BigDecimal(1/Math.pow(10,1));
                    tradePitEntity.setShendu1(String.format("%.2f",bigDecimal1));
                    tradePitEntity.setShendu2(String.format("%.1f",bigDecimal2));
                    tradePitEntity.setShendu3("0");
                }else{
                    tradePitEntity.setPriceLen2("8");
                    tradePitEntity.setPriceLen3("6");
                    BigDecimal bigDecimal1=new BigDecimal(1/Math.pow(10,12));
                    BigDecimal bigDecimal2=new BigDecimal(1/Math.pow(10,8));
                    BigDecimal bigDecimal3=new BigDecimal(1/Math.pow(10,6));
                    tradePitEntity.setShendu1(String.format("%.12f",bigDecimal1));
                    tradePitEntity.setShendu2(String.format("%.8f",bigDecimal2));
                    tradePitEntity.setShendu3(String.format("%.6f",bigDecimal3));
                }
            }
            if (!isNullOrEmpty(row.getCell(4).getStringCellValue())){
                int volume=Integer.parseInt(row.getCell(4).getStringCellValue());
                if (volume!=0) {
                    BigDecimal bigDecimal = new BigDecimal(1 / Math.pow(10, volume));
                    tradePitEntity.setVolumeLen(String.format("%." + volume + "f", bigDecimal));
                }else{
                    tradePitEntity.setVolumeLen("0");
                }
            }
            if (!isNullOrEmpty(row.getCell(6).getStringCellValue())){
                tradePitEntity.setDealMinLim(row.getCell(6).getStringCellValue());
            }
            if (!isNullOrEmpty(row.getCell(7).getStringCellValue())){
                BigDecimal yinYing=new BigDecimal(row.getCell(7).getStringCellValue());
                tradePitEntity.setYinying(yinYing.toPlainString());
            }

            list.add(tradePitEntity);
        }
        return list;
    }
    public static boolean isNullOrEmpty(String s){
        if( s==null || s.trim().length()==0 ){
            return true;
        }
        if (compareString(s, "null")) {
            return true;
        }
        return false;
    }

    public static boolean compareString(String str1, String str2) {
        if (null == str1) {
            str1 = "";
        }
        if (null == str2) {
            str2 = "";
        }
        if (str1.trim().equals(str2.trim())) {
            return true;
        }
        return false;
    }
}
